home *** CD-ROM | disk | FTP | other *** search
/ Freelog 22 / freelog 22.iso / Prog / Djgpp / DJDEV203.ZIP / info / kb.info < prev    next >
Encoding:
GNU Info File  |  2000-01-05  |  90.3 KB  |  2,022 lines

  1. This is Info file ../../../info/kb.info, produced by Makeinfo version
  2. 1.68 from the input file kb.txi.
  3.  
  4. 
  5. File: kb.info,  Node: Top,  Prev: (dir),  Up: (dir)
  6.  
  7. The DJGPP Knowledge Base
  8.  
  9. This document is a place to store random bits of information about
  10. DJGPP and how to use it efficiently.
  11.  
  12. Copyright (c) 1995,1996,1997,1998,1999 DJ Delorie
  13.  
  14. * Menu:
  15.  
  16. * Introduction::
  17.  
  18. * What Changed::        List of changes made to each release.
  19.  
  20. * Known Bugs::        List of things that we know are broken,
  21.             but either we haven't fixed them yet
  22.             or we haven't come up with a suitable
  23.             solution.
  24.  
  25. * Known Anti-Bugs::    Things that some people might think are
  26.             bugs, but are done that way on purpose.
  27.  
  28. * Hidden Features::    Things that are in djgpp but aren't
  29.             intended for the casual user.
  30.  
  31. * Index::
  32.  
  33. 
  34. File: kb.info,  Node: Introduction,  Next: What Changed,  Up: Top
  35.  
  36. Introduction
  37. ************
  38.  
  39. This is the intro.
  40.  
  41. 
  42. File: kb.info,  Node: What Changed,  Next: Known Bugs,  Prev: Introduction,  Up: Top
  43.  
  44. What Changed
  45. ************
  46.  
  47. * Menu:
  48.  
  49.  
  50. * Changes in 2.01::        DJGPP 2.01
  51. * Changes in 2.02::        DJGPP 2.02
  52. * Changes in 2.03::        DJGPP 2.03
  53.  
  54. 
  55. File: kb.info,  Node: Changes in 2.01,  Next: Changes in 2.02,  Up: What Changed
  56.  
  57. Changes in 2.01
  58. ===============
  59.  
  60. Here is a list of changes from DJGPP V2.00 to V2.01
  61.  
  62. `dxeload()' now checks for `malloc' returning NULL.
  63.  
  64. `gxx' by default also links `libstdc++.a'.
  65.  
  66. `info/dir.txi' now has full file names for binutils, bison, and find.
  67.  
  68. `include/dir.h' now packs `struct ffblk' in such a way that g++ 2.7.2
  69. works correctly.  Note that gcc 2.7.2.1 does not require this change.
  70.  
  71. `SIGINT' is now in the ANSI section of `signal.h'
  72.  
  73. `glob()' returns GLOB_NOSPACE when `malloc' fails.
  74.  
  75. `echo' now accepts `-s' to put one argument per line, instead of all on
  76. one line.
  77.  
  78. `_dos_ds' now has a limit of 4Gb instead of 16Mb.
  79.  
  80. `_is_exec' (and thus `access') check suffixes independent of case, so
  81. `.com' and `.bat' files are executable.
  82.  
  83. Documentation for `getopt' has been added.
  84.  
  85. `doscan' returns -1 when it should (and other doscan fixes).
  86.  
  87. `sigaction' works correctly.
  88.  
  89. `stat' works correctly when _STAT_EXEC_MAGIC is set but _STAT_EXE_EXT
  90. is not.
  91.  
  92. The example in the `movedata' documention correctly lists `_my_ds()'
  93. now.
  94.  
  95. `fsbd' and `edebug' shouldn't crash on long C++ symbols.
  96.  
  97. `stat' returns the correct number of links to a directory.
  98.  
  99. `fsdb' doesn't crash with multiple directories of source files.
  100.  
  101. Command line arguments are not wildcard-expanded if they were passed
  102. through `spawn*()' or `exec*()'
  103.  
  104. `stdprn' and `stdaux' work correctly now.
  105.  
  106. Documentation for `dosmemput' fixed.
  107.  
  108. `popen' and `system' no longer leak file descriptors.
  109.  
  110. `bdosptr' macro in `dos.h' is now protected better.
  111.  
  112. `system' now flushes stdout and stderr (output used to get mixed up).
  113.  
  114. `inp', `inpw', `outp', `outpw' added to `pc.h'.
  115.  
  116. `_go32_dpmi_free_real_mode_callback' frees the right stack.
  117.  
  118. Anything in `libm.a' that used `scalbn' won't leak stack (like `ldexp').
  119.  
  120. Most `stdio.h' routines rewritten for better text file handling.
  121.  
  122. `exit' won't recurse if a destructor calls `exit'.
  123.  
  124. `fcntl' supports `sys/fsext.h'.  `open' passes all flags to extensions.
  125.  
  126. `system' supports redirection and pipes directly.
  127.  
  128. `stat' bugfixes.
  129.  
  130. `mntent' supports JAM compressed drives; CDROM bug fixed.
  131.  
  132. Many fixes to LFN support.
  133.  
  134. `printf' supports long longs; new support functions in libc also.
  135.  
  136. `go32-v2' works in more cases.
  137.  
  138. `djasm' supports more opcodes and modes.
  139.  
  140. `stubify' doesn't crash as often; runs faster.
  141.  
  142. `ScreenGetChar' added to `pc.h'
  143.  
  144. `va_start' works if the last argument is not int-sized.
  145.  
  146. New function `_fargetsel()'.
  147.  
  148. `echo.exe' handles invalid options correctly now.
  149.  
  150. Some `fsdb' bugs fixed
  151.  
  152. `glob' handles `...' better now.
  153.  
  154. `ioctl' and `sys/ioctl.h' added (no unix functionality yet)
  155.  
  156. `termios.h' functionality added.
  157.  
  158. `write' no longer mallocs a buffer; it writes to the transfer buffer
  159. directly.
  160.  
  161. `getrusage' added.
  162.  
  163. `readdir' will return "." and ".." even for root directories.
  164.  
  165. 
  166. File: kb.info,  Node: Changes in 2.02,  Next: Changes in 2.03,  Prev: Changes in 2.01,  Up: What Changed
  167.  
  168. Changes in 2.02
  169. ===============
  170.  
  171. Here is a list of changes from DJGPP V2.01 to V2.02
  172.  
  173. `tests/libclink' no longer looks for DJGPP V1.
  174.  
  175. `emu387.dxe' has been rebuilt to reflect fpatan fixes.
  176.  
  177. `mcount.c' no longer writes to the mono monitor.  This had caused seg
  178. faults when profiling.
  179.  
  180. You can now "symlink" to files with 8 character base names (like
  181. 12345678.exe).  Previously, `stub.asm' assumed al was zero when it
  182. wasn't always that way.
  183.  
  184. `rawclock()' now actually returns the number of ticks since midnight,
  185. not since program start.
  186.  
  187. `libc.tex' now uses "Master Index" instead of "Index" due to conflicts
  188. with the node for `index'.
  189.  
  190. `srand()' is now documented.
  191.  
  192. `memchr()' is now 8-bit clean.
  193.  
  194. Documentation for `delay()' includes the header file.
  195.  
  196. `__dpmi_simulate_real_mode_procedure_iret()' is now properly documented
  197. as DPMI call 0x0302.
  198.  
  199. `edebug' now unassembles `scasb' correctly.
  200.  
  201. Documentation for `qsort()' has correct prototypes in the examples.
  202.  
  203. `info/dir.txi' includes an entry for the FAQ.
  204.  
  205. Functions in `conio.h' now support DOS/V's virtual screens.
  206.  
  207. `edebug' and other debuggers using the common debugging framework will
  208. properly close files when they terminate the debuggee.  This allows to
  209. restart the debuggee without losing handles.
  210.  
  211. `fnsplit()' now handles files like .emacs properly.
  212.  
  213. `glob()' now handles files like .emacs properly.  This will fix
  214. wildcard expansion on new programs.
  215.  
  216. `go32-v2.exe' properly reverts the interrupt table before running the
  217. child process.
  218.  
  219. `_lfn_gen_short_name' no longer crashes in rare cases.
  220.  
  221. `s[f]_ceil' and `s[f]_floor' functions in `libm.a' no longer crash when
  222. emulated.
  223.  
  224. `_fixpath' and `readdir' support multibyte file names.
  225.  
  226. You may now `set 387=y' to avoid the auto-detection.
  227.  
  228. `opendir("/")' works.
  229.  
  230. `rename("x", "x/y")' will now fail when "x" is a directory.
  231.  
  232. `sigprocmask' and `sigpending' actually do something now.  All of the
  233. POSIX signal functions are now documented.
  234.  
  235. `_truename' didn't use `putpath' and therefore didn't support the
  236. `/dev/' style of standard devices.  `stat' also failed on devices in
  237. some cases.  We think this is the cause of `bash' failing on
  238. redirection to `/dev/null'.
  239.  
  240. Documentation for FSEXT-enabled functions now mentions that they are
  241. FSEXT-enabled, and how to avoid that.
  242.  
  243. Documentation for `bioscom' now documents (and uses) the `port'
  244. parameter.
  245.  
  246. `ffs()' returns the correct value.
  247.  
  248. Various fixes and optimizations to `_use_lfn()'.
  249.  
  250. Return codes of `lock()' and `unlock()' are correct.
  251.  
  252. Added `memicmp()'
  253.  
  254. `tmpfile()' always opens the temp file in binary mode.
  255.  
  256. New `statfs' returns the actual size of a CD-ROM instead of the default
  257. returned by MSCDEX.
  258.  
  259. `gxx' won't try to link extra libraries if you specify `-c' or `-S' on
  260. the command line.
  261.  
  262. `_dos_findfirst()' takes a `const char *' instead of `char *'.
  263.  
  264. `rename()' handles extra error codes some network redirectors return.
  265.  
  266. `ctime' handles dumped emacs and DOS-style `$TZDIR'.
  267.  
  268. `pathconf()' returns actual values for NAME_MAX and PATH_MAX, rather
  269. than defaults.  Therefore, it can be used to detect whether a given disk
  270. supports long file names.
  271.  
  272. The return values for `_go32_dpmi_lock_data' and `_go32_dpmi_lock_code'
  273. are now documented.
  274.  
  275. The initial stack is aligned to an 8-byte boundary.
  276.  
  277. `getkey' and `getxkey' allow you to do `ALT-keypad-224'.
  278.  
  279. `popen' selects temporary files correctly now.
  280.  
  281. `pclose' returns the status of the program it read from.
  282.  
  283. `stubedit' won't let you set a transfer buffer bigger than 63k.  If the
  284. stub detects a zero there, it assumes 63k.
  285.  
  286. The stub now returns error codes in the 100..110 range when it has a
  287. startup failure.
  288.  
  289. `system' works if `$COMSPEC' isn't set.
  290.  
  291. `struct lconv' includes `mon_thousands_sep'.
  292.  
  293. `scanf' works with long double formats like `%LG'.
  294.  
  295. `_osmajor' and `_osminor' are now set at startup.
  296.  
  297. `write()' now calls FSEXT for "text" files.
  298.  
  299. `assert.h' causes no more warnings with some gcc options.
  300.  
  301. `access()' now thinks devices are read/write, instead of read-only,
  302. regardless of what the device actually supports.
  303.  
  304. New function `stackavail()' in `stdlib.h'
  305.  
  306. `echo', `split' and `merge' are now called `djecho', `djsplit' and
  307. `djmerge' to avoid clashes with GNU's `echo', `split' and `merge'
  308. programs.
  309.  
  310. `tzname[]' bug fixed; `tzname' no longer a function stub (!)
  311.  
  312. More `djasm' improvements.
  313.  
  314. Added `_v2_prog_type' to `sys/system.h' and extended `symlink' with it.
  315.  
  316. `fread' and `fwrite' are documented as returning less than the
  317. requested size, rather than -1 on error, since they never return
  318. negative values.  `fread' `fwrite'
  319.  
  320. `stub' forcefully closes file descriptors 18 and 19, so that the stub
  321. and the DPMI server have enough handles to open the swap file and read
  322. the COFF information of the DJGPP executable.
  323.  
  324. Minor fixes to `popen''s list of pending commands.
  325.  
  326. `tempnam' returns allocated memory, not a pointer to static space, and
  327. does not ignore its arguments TMPDIR and PREFIX anymore.
  328.  
  329. `difftime' can return negative numbers now.
  330.  
  331. `gethostname' removes trailing spaces now.
  332.  
  333. `insque' works with empty lists now.
  334.  
  335. `sync' also calls `_flush_disk_cache()'.
  336.  
  337. `printf' flushes stdout every time, unless it is redirected to a file,
  338. to reduce programmer confusion.  Note that `fprintf' and `vprintf'
  339. don't do this.
  340.  
  341. `exit' calls destructors *before* it closes all open files.
  342.  
  343. The code that reads blocks of data for FILE* streams has a new "slow
  344. start" algorithm that's designed to adjust the read size for both
  345. programs that seek a lot reading small amounts of data, and programs
  346. that don't seek but read lots of data.
  347.  
  348. `mktime' handles the DST change hour gracefully
  349.  
  350. `enable' and `disable' don't use DPMI (sti/cli are less buggy!)
  351.  
  352. The command line parser can handle response files generated by `find
  353. -print0'.
  354.  
  355. `malloc' and `free' have been replaced by a more efficient (and not
  356. BSD) algorithm.  The source archive still contains `bsdmallo.c' and a
  357. new even faster (but more wasteful) version in `fmalloc.c'.
  358.  
  359. `getmntent' better supports Windows NT and doesn't cause DOS to return
  360. stale data when the disk is changed.  Removable media such as JAZ
  361. drives are no longer reported when the drive is empty.  Disks written by
  362. Windows 9X are no longer reported with bogus names taken from LFN
  363. directory entries (which have their volume label attribute bit set).
  364.  
  365. File names which begin with `/dev/' or `x:/dev/' (where `x:' is any
  366. drive letter) are treated specially by all file-oriented library
  367. functions.  `/dev/tty' is converted to `con' and `/dev/null' is
  368. converted to `nul', to make porting of Unix programs easier.  Other
  369. names get the drive letter and the `/dev/' prefix removed, so e.g.
  370. `d:/dev/lpt1' is converted to `lpt1'.  This is because DOS handles
  371. device names inconsistently unless they are devoid of the `x:/dev/'
  372. prefix.  File names of the form `/dev/x/foo' are converted to `x:/foo';
  373. this allows to use Unix-style path names which always begin with a
  374. forward slash.
  375.  
  376. The startup code now masks *all* numeric exceptions when a
  377. floating-point hardware is present.  This means that illegal operations
  378. like `sqrt(-1)' will now return `NaN' (Not-a-number) rather than raise
  379. the `SIGFPE' signal.
  380.  
  381. `fstat' is now more reliable when called from programs under a
  382. debugger, does not report bogus results on NT, reports files on the A:
  383. drive correctly, and correctly reports the write access bit on
  384. Windows9X.
  385.  
  386. `stat' is now more reliable on NT and with character devices.
  387.  
  388. `djgpp.env' is read before command line arguments are expanded, so that
  389. they'll honor the `LFN' setting in `djgpp.env'.
  390.  
  391. The `sys_siglist[]' array is now available with the names of all the
  392. signals, and the function `psignal' can be used to print messages which
  393. include the signal names.
  394.  
  395. The new functions `basename' and `dirname' can be used to extract
  396. directory and basename parts from file names.
  397.  
  398. `_my_ds', `_my_cs' and `_my_ss' work for selectors with the high bit
  399. set.
  400.  
  401. The new function `_creatnew' creates a file only if it didn't already
  402. exist.
  403.  
  404. `tmpfile' makes sure it opens a file which is not and will not be used
  405. by any other program.  It does so by repeatedly calling `tmpnam' until
  406. `_creatnew' succeeds to create a file which didn't exist before.  The
  407. temporary file is opened in DENY_ALL mode, so that no other process can
  408. neither read from nor write to it.  In case of a failure, `tmpfile'
  409. does not leak memory anymore.
  410.  
  411. Previously, there was a small probability that a call to `open' with
  412. the `O_CREAT' and `O_EXCL' bits set would succeed even though the named
  413. file already existed (created by another process).  This window is now
  414. closed.
  415.  
  416. `mkstemp' now makes sure the file it creates is unique even if other
  417. processes can create files in the same directory, and opens the file in
  418. DENY_ALL mode.
  419.  
  420. `__FSEXT_alloc_fd' now duplicates the initial file handle instead of
  421. reopening the NUL device on each call.  Thus, it is no longer limited
  422. by the value of the `FILES=' parameter on your `CONFIG.SYS', but can
  423. allocate up to 254 handles (which is the maximum number allowed by DOS).
  424.  
  425. `rename' will properly fail if the file doesn't exist.
  426.  
  427. `system' is now compliant with ANSI C Standard when its argument is a
  428. NULL pointer.
  429.  
  430. Previously, at program startup `errno' would retain whatever value it
  431. was assigned by the DJGPP startup code.  ANSI C Standard requires
  432. `errno' to be zero at the beginning of `main', so it is now reset to
  433. zero before calling `main'.
  434.  
  435. The stack dump printed when a program is aborted or crashes was
  436. improved.  First, it is no longer limited to 10 stack frames.  When the
  437. standard error stream is connected to the console, the maximum number of
  438. frames is computed so that the stack dump will use all the available
  439. screen area, without scrolling off the visible part.  For example, at
  440. 50-line display, you can have as much as 36 stack frames printed and
  441. still see the registers and selectors dump, and the exception mnemonic
  442. that preceed it.
  443.  
  444. When stderr is not the console, the number of printed stack frames is
  445. only limited by the stack size of the running program.
  446.  
  447. In addition, the top and bottom of both the application code stack and
  448. the locked stack used for processing exceptions, are printed.  This
  449. makes detection of stack overflows and other stack-related atrocities
  450. much easier.
  451.  
  452. The `_doserrno' global variable is now provided.  Whenever a DOS call
  453. fails, this variable gets assigned the value of the error code returned
  454. by the failed DOS function.
  455.  
  456. The header `sys/dxe.h' now works with C++.
  457.  
  458. `fflush' now conforms to ANSI C standard when called with a `NULL'
  459. argument.
  460.  
  461. `__dpmi_yield' doesn't wedge the DOS box on some versions of Windows 9X
  462. anymore.
  463.  
  464. `outports*' takes a const buffer
  465.  
  466. `glob' will initalize `*pglob' when appropriate.
  467.  
  468. The conversion functions `ecvtbuf', `ecvt', `fcvtbuf', `fcvt', and
  469. `gcvt' are now provided.
  470.  
  471. The startup code now recognizes an additional flag
  472. _CRT0_FLAG_KEEP_QUOTES, which forces it to retain quote characters in
  473. command-line arguments.
  474.  
  475. `redir' invokes the subsidiary program in a way that preserves the
  476. command-line expansion.  Thus, you can now use `redir' to invoke
  477. programs whose command lines include quote characters and file name
  478. wildcards, and they will work as expected.
  479.  
  480. Also, `redir' no longer crashes if the subsidiary program was
  481. interrupted or crashed, and reports the run time with millisecond
  482. resolution.
  483.  
  484. The exit code now makes sure the timer interrupt is left pointing to its
  485. original handler, even if the program is aborted, or exits without
  486. disabling timers.  `__djgpp_exception_toggle' now toggles the timer
  487. interrupt handler as well, if it was hooked by SIGALRM/SIGPROF handler
  488. or by `setitimer'.  Thus, timers, periodic alarms, and profiling will
  489. be disabled inside blocks that call `__djgpp_exception_toggle'.
  490.  
  491. The functions of the `printf' family now always print a negative sign
  492. for a negative floating-point argument, even when the conversion
  493. generated no significant digits (i.e. only zeros are printed), if the
  494. format specifier requests an explicit sign, like in "%+f".  A special
  495. NaN value will also be printed with a sign in these cases (e.g. try
  496. printing `-nanf()').
  497.  
  498. `select' now correctly zeroes out all the bits in the `fd_set'
  499. arguments when it returns due to expired timeout.
  500.  
  501. `readdir' now includes hidden files and directories in the search by
  502. default.  The `__OPENDIR_FIND_HIDDEN' bit of the `__opendir_flags'
  503. variable has no effect, and a new `__OPENDIR_NO_HIDDEN' bit is provided
  504. to exclude hidden files/directories from the search.
  505.  
  506. `getmntent' better supports Windows NT and doesn't cause DOS to return
  507. stale data when the disk is changed.  Removable media such as JAZ
  508. drives are no longer reported when the drive is empty.  Disks written by
  509. Windows 9X are no longer reported with bogus names taken from LFN
  510. directory entries (which have their volume label attribute bit set).
  511.  
  512. `opendir', `closedir' and `rewinddir' don't lose search handles anymore
  513. when long file names are supported.  `rewinddir' and `seekdir' will not
  514. miss the (possibly faked) `.' and `..' entries in root directories.
  515.  
  516. Asynchronous signals (`SIGINT', `SIGQUIT', `SIGALRM' and `SIGPROF') no
  517. longer crash programs running on Windows when the signal happens inside
  518. the `__dpmi_int' function (`__dpmi_int' is called by every library
  519. function that requires DOS or BIOS services).  We believe this problem
  520. caused crashes in multi-threading packages that used timers and
  521. `SIGALRM' to switch threads.
  522.  
  523. 
  524. File: kb.info,  Node: Changes in 2.03,  Prev: Changes in 2.02,  Up: What Changed
  525.  
  526. Changes in 2.03
  527. ===============
  528.  
  529. Here is a list of changes from DJGPP V2.02 to V2.03
  530.  
  531. Bugs in the `itimer' functions are fixed.  In particular:
  532.  
  533.    - profiling (which was broken in v2.02) now works;
  534.  
  535.    - the timers are now more accurate for small (100ms or less)
  536.      intervals;
  537.  
  538.    - large values of the `tv_usec' member in `itimerval' structure
  539.      don't cause internal calculations in `setitimer' to overflow;
  540.  
  541.    - `getitimer' now returns correct info in the `tv_usec' member;
  542.  
  543.    - the timers and the `alarm' function work correctly when the calling
  544.      program invokes the `uclock' library function before setting a
  545.      timer.
  546.  
  547. `localtime', `ctime' and `mktime' now notice changes in the value of
  548. the `TZ' environment variable during the program run, and adjust their
  549. computation accordingly.  They also don't fail for the first date after
  550. the epoch.  `mktime' now avoids looping for preposterously long time
  551. when passed very large values in the members of `struct tm'.
  552.  
  553. When passed an empty string as the file name, `stat' now fails and sets
  554. `errno' to `ENOENT', instead of returning information about the current
  555. directory.  Also, `stat' no longer reports invalid time stamps for root
  556. directories of floppy disks that were written on Windows 9X or Windows
  557. NT.
  558.  
  559. The startup code now correctly sets up the keys that generate `SIGINT'
  560. and `SIGQUIT' signals on PC98 machines.
  561.  
  562. `putc' and `fputc' no longer return -1 when they write the value
  563. `(signed char)0xff' to a file.
  564.  
  565. The header `wctype.h' from v2.02 caused pre-processor errors, and could
  566. not be included *before* `ctype.h'.  This is now fixed.
  567.  
  568. Functions of the `printf' family no longer cause the calling program to
  569. crash when passed `long double' variables with invalid bit patterns
  570. (the so-called "unnormal" numbers).  Such arguments are now printed as
  571. `Unnormal'.
  572.  
  573. `srand' now documented as returning a void.
  574.  
  575. `rand48' and friends are now in libc.
  576.  
  577. Many fixes to calls to `tolower'/`toupper' with signed chars.
  578.  
  579. The rmcb stub doesn't restore the flags so that you can return
  580. different ones.
  581.  
  582. Doc fixes for ansi/posix portability.
  583.  
  584. Handle error conditions in `bin2h'.
  585.  
  586. `tests/libclink/check.cc' - remove duplicates.
  587.  
  588. Remove unneeded includes from `rand.c'.
  589.  
  590. Call `system' properly in termios (Ctrl-Z).
  591.  
  592. Work around a gcc 2.8.1 bug in emu387.
  593.  
  594. Linking with -lemu should obviate the need for emu387.dxe.
  595.  
  596. The "Hidden Features" chapter of the Knowledge Base now actually
  597. describes most of the special features provided by DJGPP.
  598.  
  599. `redir' no longer fails to run programs when the program name is a
  600. substring of the redirected I/O file(s).
  601.  
  602. `glob' correctly converts the letter-case of the file names when the
  603. pattern include mixed upper- and lower-case letters.  In particular,
  604. the letter-case of the command-line arguments expanded by the startup
  605. code in the `argv[]' array is now correct in these cases.
  606.  
  607. `textcolor' and `textbackground' now support the 16 background colors
  608. mode (e.g., after a call to `intensevideo').  Previously,
  609. `textbackground' would ignore the high intensity color bit in its
  610. argument, and `textcolor' would clobber thatt bit sometimes.
  611.  
  612. A call to `lowvideo' doesn't clobber the background color anymore.
  613.  
  614. The global variable `ScreenAttrib' now always matches the value of the
  615. `attribute' member of the `text_info' struct returned by `gettexinfo'.
  616.  
  617. If the last character of a response file is `^Z', it is now ignored.
  618. Previous versions would pass it to the `main' function.  Use two `^Z'
  619. characters in a row if you actually need to pass such a character as
  620. part of the last element of the `argv[]' array.
  621.  
  622. `fputs' now returns `EOF' when called on an unbuffered stream, and
  623. there's some error (such as `ENOSPC') in writing to that stream.
  624.  
  625. If both arguments of `_rename' and `rename' refer to the same file,
  626. they no longer remove that file.
  627.  
  628. Functions of the `scanf' family no longer crash or work incorrectly
  629. when passed format specifiers with upper-case letters, such as `%lX' or
  630. `%E'.  Non-ANSI extensions to the format specifiers and qualifiers,
  631. such as `%lld' and `%U', are now documented and their portability
  632. information included in the library docs.
  633.  
  634. The function `__crt0_load_environment_file' called by the startup code
  635. now strips trailing blanks and TABs from the `[program]' lines of the
  636. `DJGPP.ENV' file which define sections for individual programs.  This
  637. is so editing `DJGPP.ENV' with some losing editors that don't strip
  638. trailing whitespace when saving the file doesn't prevent the startup
  639. code from recognizing section names.
  640.  
  641. `dtou' and `utod' no longer overwrite the stack when invoked on file
  642. names longer than 80 characters.
  643.  
  644. `system' works when its argument uses redirection to/from quoted file
  645. names (e.g., when the file name includes embedded whitespace).
  646.  
  647. Buffered stdio functions, such as `getc', `putc', `fread', `printf',
  648. and all their relatives pay attention to `termios' settings of the
  649. terminal device and behave accordingly.  For example, you can get
  650. single-character, no-echo input with the following snippet:
  651.  
  652.       struct termios charmode;
  653.      
  654.       tcgetattr (0, &charmode);
  655.       charmode.c_lflag &= ~(ECHO | ICANON | ISIG);
  656.       tcsetattr (0, &charmode);
  657.  
  658. If you reset the `ISIG' or `BRKINT' flags in the `termios' structure,
  659. or set the `IGNBRK' flag, `tcsetattr' now disables `SIGINT' generation
  660. by a `Ctrl-<C>' or `Ctrl-<BREAK>' keypress, and generation of `SIGQUIT'
  661. by pressing `Ctrl-<\>'.
  662.  
  663. A call like `tcflush (0, TCIFLUSH);' now empties the BIOS keyboard
  664. buffer in addition to the internal buffer maintained by the `termios'
  665. input processing.  This is compatible with the Unix specification that
  666. `tcflush' should "discard all data received but not read".
  667.  
  668. Library function `system' no longer crashes when given invalid command
  669. lines which involve pipe symbols `|'.  Typically, such command lines
  670. should have been run by a Unix-style shell, like Bash.  However,
  671. sometimes, due to some system configuration snafu, the `SHELL' variable
  672. in the environment didn't point to such a shell, and `system' would try
  673. to execute the command line using its internal emulator of
  674. `COMMAND.COM'; it would then crash due to a bug.  This is now solved:
  675. `system' prints appropriate error message(s) and exits with an error
  676. code of -1.  We believe that some of the rarely-reported and
  677. hard-to-reproduce crashes of the Make utility were due to this bug.
  678.  
  679. Previously, when attempt was made to open a file, and all the available
  680. file handles were exhausted, `open' would sometimes truncate an
  681. existing file on Windows 9X.  This is now fixed.
  682.  
  683. All DJGPP programs now clear the FPU exceptions when they exit.  This
  684. prevents the next DJGPP program that is run in the same DOS box on
  685. Windows 9X from crashing during startup code.
  686.  
  687. When the `387' environment variable overrides the FPU auto-detect code,
  688. the value of the global variable `_8087' is now set by the startup code
  689. according to the environment override: 3 if `387' is set to `y', 0
  690. otherwise.
  691.  
  692. You can use the special `/dev/env/foo/' construct in file names to
  693. expand it into the value of the environment variable `foo' at run time.
  694. `/dev/env/foo~bar~' will expand to `bar' if `foo' is undefined, or if
  695. its value is empty.
  696.  
  697. Calling `getch' and `getche' flushes the `stdout' and `stderr' streams,
  698. if they are connected to the console and have any pending buffered
  699. characters.
  700.  
  701. A bug in the library caused programs like Emacs, which dump their data
  702. and then restart, to use stale `FILE' objects created before they were
  703. dumped.  This caused warning messages to be issued by GDB near the end
  704. of debugging session.  This bug is now fixed.
  705.  
  706. Due to a peculiarity of the timer device virtualization, the values
  707. returned by `uclock' on Windows during the first 54.9msec after the
  708. first call (which reprograms the timer chip) were erratic, some of them
  709. negative, some positive.  To work around this, the first call to
  710. `uclock' on Windows now waits until the next timer tick before
  711. returning, to ensure that all the values returned hence are
  712. monotonously increasing.
  713.  
  714. The termios emulation now uses raw input/output only if the file handle
  715. referring to a device is put into binary mode, and the device itself is
  716. in raw mode.
  717.  
  718. The termios input routines no longer generate the `SIGINT' and
  719. `SIGQUIT' signals twice when `Ctrl-<C>' or `Ctrl-<\>' are pressed.
  720.  
  721. A call to `__djgpp_set_ctrl_c' with a negative argument returns the
  722. current state of `SIGINT' and `SIGQUIT' generation without altering it.
  723.  
  724. The `termios' cooked-mode output now expands TABs into the appropriate
  725. number of spaces when writing to the console device.
  726.  
  727. The `setmode' function now switches character devices to raw/cooked
  728. mode even when `termios' functions are used.
  729.  
  730. `freopen' now correctly sets the read/write access flags when `+' is
  731. the last (third) character of the MODE string, like in `wt+' or `ab+'.
  732.  
  733. Previously, `searchpath' would always return its argument unchanged and
  734. signal a success, when the argument included slashes or a drive letter,
  735. even if the file didn't actually exist.  This is now fixed:
  736. non-existent files always cause `searchpath' to return a `NULL' pointer.
  737.  
  738. The DJGPP debug support functions in `libdbg.a' now have the capability
  739. to debug programs that catch signals such as `SIGINT'.  The signal
  740. interrupts the debuggee and is reported by the debugger, instead of
  741. aborting the debuggee.  You can also deliver signals to the debuggee,
  742. even if they didn't actually happen.  Most of the work that made this
  743. possible was done by Pierre Muller <muller@cerbere.u-strasbg.fr> and
  744. Andris Pavenis <pavenis@lanet.lv>.
  745.  
  746. The debugging support functions in `libdbg.a' now correctly handle the
  747. `SIGQUIT' signal that happens while the debuggee runs.  Previously, a
  748. debugger would crash or report `SIGINT' in such cases.
  749.  
  750. The DJGPP functions in `libdbg.a' support FP code much better now,
  751. especially when FP exceptions happen in the debugged program.  The full
  752. state of the numeric processor is saved and restored when the execution
  753. thread jumps from the debugger to the debuggee and back.
  754.  
  755. It is now possible to debug programs that redirect their standard
  756. handles, without the debugger losing those handles at the same time.
  757. Debuggers which want to use this feature need to call the new `redir_*'
  758. functions before and after jumping to the debuggee's code.  *Note
  759. Redirection in the debugger: (libc)redir_debug_init.
  760.  
  761. The documentation for the debug support functions in `libdbg.a' is now
  762. part of the library reference.
  763.  
  764. When a raw COFF image (i.e., without a stub) is debugged, its stack
  765. length and the size of transfer buffer are now taken from the values
  766. used by the debugger.  This means that you can have predictable results
  767. by stubediting the debugger's executable.
  768.  
  769. `__dpmi_simulate_real_mode_procedure_retf_stack' no longer fills part
  770. of the real-mode stack with garbage.  The parameters specification was
  771. changed so that the second argument is now the number of 16-bit words
  772. to copy to the real-mode stack, like the DPMI spec requires.
  773.  
  774. The floating-point emulator software had a bug in emulation of
  775. subtraction, addition, and comparison instructions, whereby the results
  776. produced for some rare pairs of numbers with the same exponent but
  777. different mantissa were grossly incorrect.  This is now fixed.  This
  778. bug was known to cause all kinds of weird failures, like incorrect
  779. values produced by functions `sin' and `cos', programs being trapped
  780. inside infinite loops when they called `acos', etc.
  781.  
  782. The FP emulation library `libemu.a' omitted the specially-compiled FPU
  783. setup module `npxsetup.o' which arranges for floating-point
  784. instructions to call functions from `libemu.a'.  This caused programs
  785. linked with `-lemu' to require the dynamically-loaded emulator,
  786. `emu387.dxe', even though the emulation code was linked into the
  787. program.  This bug is now fixed.
  788.  
  789. `rename' now sets `errno' to `EACCES' when an attempt is made to rename
  790. an open file.  Previously, `errno' was set to `ENOENT' in these cases.
  791.  
  792. Library functions that process strings and file names, such as
  793. `strupr', `stricmp', `strtol', `fnmatch', and the functions from
  794. `printf' and `scanf' families, handle 8-bit characters correctly when
  795. they call `ctype' character-classification functions internally.
  796.  
  797. New versions of mathematical functions, written by
  798. Eric Rudd <rudd@cyberoptics.com>, are now included in the standard C
  799. library, `libc.a'.  The new versions are ANSI-compatible (they set
  800. `errno' in case of FP errors), yet very fast and accurate.  Programs
  801. that require accurate floating-point computations can now be linked
  802. without `-lm', unless they need the `matherr' call-back or compliance
  803. to standards like X/Open or SVID.
  804.  
  805. New math functions are provided: `powi', `cbrt', `expm1', `exp2',
  806. `exp10', and `sincos'.
  807.  
  808. If the format specifier for a floating-point number includes the `+'
  809. flag (meaning that the sign should be printed even if the number is
  810. positive), the functions of the `printf' family will now print the
  811. negative zero, `-0.0', with an explicit negative sign.
  812.  
  813. `access' no longer loses a `FileFind' handle on LFN platforms when
  814. called on a root directory or a character device.
  815.  
  816. `_check_v2_prog' no longer leaks file descriptors when called on a
  817. corrupt executable by name.
  818.  
  819. `setitimer' no longer crashes when its second argument is a `NULL'
  820. pointer, it simply returns after setting the third argument to the
  821. value of the last timer set with a previous call to `setitimer'.
  822.  
  823. `setitimer' now rounds up timer values smaller than the system clock
  824. granularity to that granularity, before it uses the values.  Therefore,
  825. `setitimer' and `getitimer' will return rounded up values for such
  826. small timers.  The global variable `__djgpp_clock_tick_interval' is
  827. provided for changing the granularity used by `setitimer', in case an
  828. application reprograms the timer chip to run with a non-standard
  829. frequency.
  830.  
  831. `ftruncate' now leaves the file pointer at the same byte position as it
  832. were before the function was called.
  833.  
  834. Functions of the `scanf' family now correctly stop the scan when they
  835. encounter a digit larger than 7, and either the format specifies octal
  836. conversion, like in `%o', or the format is `%i' and the leading digit
  837. is `0', which implies octal conversion.
  838.  
  839. Functions of the `scanf' family now use 16 as the base for converting
  840. pointer values read with the `%p' format.  Thus, reading back a pointer
  841. written with the `%p' format now yields the original value.
  842.  
  843. `kill' now sets `errno' to `ENOSYS' when called with a PID argument
  844. that isn't the caller's PID, since DOS doesn't allow sending signals to
  845. other processes.
  846.  
  847. The startup code and the linker script file `djgpp.djl' include support
  848. for long section names.  Long section names are required by the latest
  849. versions of GNU Binutils to support automatic template instantiation in
  850. C++ programs.
  851.  
  852. The `tcgetpgrp' and `tcsetpgrp' are now provided in the library.
  853.  
  854. `realloc' no longer crashes when the avialable virtual memory is not
  855. enough to satisfy the reallocation request.
  856.  
  857. Previously, the `symlink' function would sometimes think that the
  858. source and the target of the link were in the same directory, when in
  859. fact they weren't.  This bug is now fixed.
  860.  
  861. `djtar' now creates the file `tarchange.lst' only if it actually needs
  862. to rename some of the files during unpacking.  In particular, simply
  863. listing the contents of an archive, as in `djtar foo.tgz', will not
  864. produce an empty `tarchange.lst' file anymore.
  865.  
  866. The function `memicmp' was omitted from the library in version 2.02.
  867. This is fixed now.
  868.  
  869. Previously, `fsdb' could not step over function calls when 4 or more
  870. breakpoints were set: it would display an error message saying that
  871. `Exception 3 occurred'.  This is now fixed.  In addition, `fsdb' now
  872. supports the `SIGQUIT' signal, if the program being debugged generates
  873. it.
  874.  
  875. The floating-point emulation now works on Windows.  Previously, a bug in
  876. the emulation of the WAIT/FWAIT instructions caused the emulator to get
  877. stuck in an endless loop on Windows.  (On MS-DOS, these two instructions
  878. don't generate an FP exception, and so don't get into the emulator.)
  879.  
  880. `redir' no longer crashes when floating-point instructions are emulated.
  881.  
  882. The emulator setup in the startup code now correctly masks all FP
  883. exceptions in the emulated control word, like the hardware FPU setup
  884. does.  If some numeric exception is unmasked by an application and is
  885. triggered by some abnormal condition in the emulator (e.g., if an
  886. application attempts to compute a square root of a negative number), the
  887. emulation simulates exception 16, the Coprocessor Error exception.
  888. (Previously, the exception number in the DJGPP exception structure was
  889. not set by the emulation, and was left at its old value set by the
  890. Coprocessor Not Present exception generated by the emulated
  891. instruction.  This caused incorrect message to be printed when the
  892. program crashed, and defeated user-defined handlers for `SIGFPE'.)
  893.  
  894. The emulator now correctly sets the condition code bits `C0', `C1',
  895. `C2', and `C3' when an exceptional condition is raised, and as result
  896. of emulating the `FPREM' and `FPREM1' instructions.
  897.  
  898. The floating-point emulator software had a bug in emulation of the
  899. `FSQRT' instruction, which could cause the calling program to hang.
  900. This was due to incorrect optimization by the version of GCC used to
  901. produce `djdev202.zip'.  The new version of the emulator works around
  902. this bug by preventinging the compiler from performing these incorrect
  903. optimizations.
  904.  
  905. `fsetpos' no longer returns zero when it fails to move the file
  906. position pointer.
  907.  
  908. `djtar' now converts `.info-' into `.i' only if the character following
  909. `.info-' is a digit.  `.tar.gz' is converted to `.tgz' only at the end
  910. of a file name.  `++' is converted to `xx' (instead of `plus' in
  911. previous versions), and this conversion is performed for all
  912. occurrences of `++' in a file name (previous versions only converted
  913. the first occurrence).
  914.  
  915. The `gxx' compiler driver no longer reports an error if the optional
  916. GNU C++ class library `libgpp.a' is not installed.  If `libgpp.a'
  917. cannot be found where `gcc' would look for it, `gxx' does not pass the
  918. `-lgpp' option to the linker.  Also, if the standard C++ library,
  919. `libstdcxx.a', cannot be found, `gxx' now tries `libstdcx.a' and
  920. `libstd~1.a', in case the user has some LFN-related installation
  921. *snafu*.
  922.  
  923. The FP emulation behaves closer to a real FPU when an FP instruction
  924. produces abnormal results, such as `Inf' or `NaN'.  In particular:
  925.  
  926.    * Overflow and underflow are now correctly detected in addition,
  927.      subtraction, multiplication and division, and instructions that
  928.      perform these operations internally.  Overflow causes an `Inf' to
  929.      be stored in the results, while underflow usually results in a
  930.      denormal or a zero.
  931.  
  932.    * Undefined operations, such as division of zero by zero or of `Inf'
  933.      by an `Inf', produce a `NaN'.
  934.  
  935.    * Emulation of `FST' and `FSTP' instructions avoids overflowing of
  936.      the exponent when it is too large for the destination format; it
  937.      stores an `Inf' or a maximum finite number instead.  Operands that
  938.      are too small for the destination format cause either a denormal
  939.      or a zero to be stored.
  940.  
  941.    * The emulation of `FXCH' stores a `NaN' when one or both of its
  942.      operands is a `NaN'.
  943.  
  944.    * The emulation of `FYL2X' always pops the operands from the FPU
  945.      stack, even if one of the operands is invalid (`Inf' or `NaN'), or
  946.      if the operand on top of the stack is negative.  This affects
  947.      functions `acosh' and `asinh'.
  948.  
  949.    * The emulation of the `FPREM' and `FPREM1' instructions no longer
  950.      hangs the program when the difference of the exponents of the
  951.      operands is larger than 64.  Instead, it correctly implements the
  952.      "partial remainder" algorithm defined by the Intel manuals.  Also,
  953.      the sign of the result of these instructions is now in accordance
  954.      with the Intel manuals (this affects the `ceil' function for small
  955.      negative arguments).
  956.  
  957.    * The emulation of `FPTAN' now correctly handles the case where its
  958.      operand is out of range.
  959.  
  960.    * `FPATAN' emulation now uses a better approximation which is
  961.      accurate to 63 bits, even when its argument is near 1.
  962.      (Previously, it would suffer a catastrophic accuracy loss of up to
  963.      13 significant digits for arguments near 1.)  This affects
  964.      functions `atan', `atan2', `asin', and `acos'.
  965.  
  966.    * The emulation of `FSQRT' behaves correctly for infinite arguments.
  967.  
  968.    * `FRNDINT' emulation returns a negative zero for negative
  969.      arguments.  This affects the `fmod' function for negative
  970.      arguments.
  971.  
  972.    * The emulation of `FSCALE' handles overflow correctly.
  973.  
  974.    * The emulations of `FSINCOS', `FSIN' and `FCOS' return a `NaN' for
  975.      an argument that is a `NaN', and raise an Invalid Operation
  976.      exception for an `Inf' argument; this is what the Intel manuals
  977.      require.  This affects functions `sin', `cos', `sincos', and `tan'.
  978.  
  979.    * The emulation of instructions `FST' and `FSTP' that store FP
  980.      registers into `float' or `double' variables, now correctly round
  981.      the stored value according to the current rounding mode.
  982.      Previoulsy, the stored value was always chopped (truncated) at the
  983.      last stored bit of the mantissa.
  984.  
  985. The `wchar_t' data type is changed so that DJGPP now supports 16-bit
  986. wide characters.  This is required for RSXNTDJ programs to be
  987. compatible with Windows implementation of Unicode.
  988.  
  989. The long file-name (LFN) support is no longer disabled after `_use_lfn'
  990. (or some other library functions that call it) were called with a file
  991. name which refers to an invalid drive or a drive whose media has been
  992. removed (e.g. an empty floppy drive).  `_get_volume_info' now returns
  993. `_FILESYS_UNKNOWN' for such drives.
  994.  
  995. `symify' no longer crashes when the name of the function or source file
  996. are too long to fit on a single screen line.  It also doesn't overwrite
  997. the address on the next screen line.  Instead, `symify' truncates the
  998. long names to fit on a single screen line.
  999.  
  1000. `tmpfile' no longer gets stuck in an endless loop when all the
  1001. available file handles are exhausted.
  1002.  
  1003. 
  1004. File: kb.info,  Node: Known Bugs,  Next: Known Anti-Bugs,  Prev: What Changed,  Up: Top
  1005.  
  1006. Known Bugs
  1007. **********
  1008.  
  1009. 
  1010. File: kb.info,  Node: Known Anti-Bugs,  Next: Hidden Features,  Prev: Known Bugs,  Up: Top
  1011.  
  1012. Known Anti-Bugs
  1013. ***************
  1014.  
  1015. 
  1016. File: kb.info,  Node: Hidden Features,  Prev: Known Anti-Bugs,  Up: Top
  1017.  
  1018. Hidden Features
  1019. ***************
  1020.  
  1021. DJGPP has numerous features hidden in it.  Most of these are described
  1022. elsewhere in the existing documentation, but they are usually hard to
  1023. find "amidst the fine print", and their combined impact is hard to
  1024. appreciate without seeing them all together.  This chapter describes
  1025. some of the more important features and their interconnections.
  1026.  
  1027. * Menu:
  1028.  
  1029. * Features::    The features provided by DJGPP.
  1030. * DJGPP.ENV::   All about the format of the `djgpp.env' file
  1031.  
  1032. 
  1033. File: kb.info,  Node: Features,  Next: DJGPP.ENV,  Up: Hidden Features
  1034.  
  1035. Features provided by DJGPP
  1036. ==========================
  1037.  
  1038. This section describes some advanced features provided by DJGPP.  Most
  1039. of these features are built into the C library, but some are provided
  1040. by the basic development utilities which are part of the DJGPP
  1041. development environment.  Since DJGPP is a Posix-compliant environment,
  1042. many of these features are motivated by Unix compatibility.
  1043.  
  1044.    * Compatible headers and libraries.
  1045.  
  1046.      The DJGPP header files and library functions are highly compatible
  1047.      with other popular environments.  In addition to full ANSI and
  1048.      Posix compliance, DJGPP also offers compatibility to many PC and
  1049.      Unix libraries.  For example, DJGPP provides library functions
  1050.      that are usually absent from other DOS- and Windows-based
  1051.      libraries, like `popen', `glob', `statfs', `getmntent',
  1052.      `getpwnam', `select', and `ftw'.  Other functions, although they
  1053.      exist in DOS/Windows libraries, are incompatible with Posix in
  1054.      subtle ways.  For example, the ANSI-standard function `rename'
  1055.      typically fails in DOS/Windows implementations if the target file
  1056.      already exists (because the underlying OS call fails).  DJGPP
  1057.      makes a point of sticking to Posix or Unix behavior in such cases,
  1058.      even if it means more processing (like removing the target file in
  1059.      the case of `rename').
  1060.  
  1061.      A case in point is library functions `stat' and `fstat'.  Unix
  1062.      programs make extensive use of the inode number and the mode bits
  1063.      returned by these functions.  For example, GNU `diff' examines the
  1064.      inode numbers of the files it is about to compare, and if they are
  1065.      equal, exits immediately on the assumption that both file names
  1066.      point to the same file.  However, DOS and Windows don't support
  1067.      inodes, and most other DOS/Windows implementations return zero in
  1068.      the `st_inode' member of `struct stat', which of course breaks
  1069.      `diff'.  Also, the mode bits returned by `fstat' are usually
  1070.      incorrect.  In contrast, the DJGPP implementation of these
  1071.      functions goes out of its way to provide compatible
  1072.      implementations for these functions, and in particular returns
  1073.      meaningful inode numbers, even though it takes quite a lot of code
  1074.      (for example, `stat' code compiled totals about 17KB, together
  1075.      with other library functions it calls).
  1076.  
  1077.      Such high compatibility makes porting programs very easy.
  1078.  
  1079.    * Long command lines.
  1080.  
  1081.      When DOS invokes programs, it limits the length of the command
  1082.      line to 126 characters (excluding the program's name).  This is a
  1083.      ridiculously small limit; it doesn't even allow to compile GCC,
  1084.      since many commands in GCC `Makefile's are much longer.
  1085.  
  1086.      Therefore, DJGPP provides a mechanism to pass long command lines to
  1087.      child programs.  The actual command is stored in the transfer
  1088.      buffer, and a pointer to that buffer is passed to the child
  1089.      program instead of the command line itself.  The startup code of
  1090.      the child program then retrieves the actual command-line arguments
  1091.      and puts them into the `argv[]' array passed to `main'.
  1092.  
  1093.      DJGPP also supports the so-called "response file" method of
  1094.      passing long command lines, whereby the command line is stored on
  1095.      a disk file, and the name of that file is passed as
  1096.      `@response-file'.  For example:
  1097.  
  1098.            ar cq libmylib.a @files-list
  1099.  
  1100.    * Unix-style file-name globbing.
  1101.  
  1102.      All Unix programs assume that any file-name wildcards on their
  1103.      command line were already expanded by the shell, to yield normal
  1104.      file names.  But DOS shells don't provide this functionality, so
  1105.      the wildcards would wind up verbatim in the `argv[]' array.  To
  1106.      avoid the need to have special code in every ported program that
  1107.      expands the wildcards, the DJGPP startup code expands the
  1108.      wildcards automatically.  The expansion follows the Unix
  1109.      conventions, so `*' expands to all file names, unlike the DOS
  1110.      conventions where it excludes file names with extensions.
  1111.  
  1112.      The globbing code supports Unix-style quoting with the `'' and `"'
  1113.      characters (most other DOS/Windows compilers and shells only
  1114.      support `"').  Escaping special characters with `\' is limited to
  1115.      the quote characters themselves, since `\' serves as a directory
  1116.      separator in DOS/Windows file names.
  1117.  
  1118.      DJGPP also provides a special extension: the `...' wildcard
  1119.      expands recursively to all the subdirectories.  Thus, the following
  1120.      command would search all files in all the subdirectories,
  1121.      recursively:
  1122.  
  1123.            grep foo .../*
  1124.  
  1125.      (This was hard to achieve even on Unix, until the recent release
  1126.      of the GNU Grep package introduced the `--recursive' option.)
  1127.  
  1128.    * Extending the shell via the `system' function.
  1129.  
  1130.      Traditionally, the `system' library function calls the shell to
  1131.      process its argument.  However, stock DOS shell `COMMAND.COM' is
  1132.      too dumb to be useful in many cases.  For example, it doesn't
  1133.      support long command lines, even though DJGPP programs do; it
  1134.      doesn't understand forward slashes in file names; and it doesn't
  1135.      return the exit code of the child program to the parent.
  1136.  
  1137.      Therefore, the DJGPP version of `system' usually doesn't call
  1138.      `COMMAND.COM' at all.  Instead, it internally emulates its
  1139.      functionality, including redirection and pipes, and invokes the
  1140.      programs directly.  This allows to provide the following important
  1141.      features:
  1142.  
  1143.         - Long command lines.
  1144.  
  1145.           This is described under "Long command lines" above, but here
  1146.           it means that shell commands can have arbitrary length, even
  1147.           though the shell itself doesn't support that!
  1148.  
  1149.         - Unix-style file names.
  1150.  
  1151.           File names which are targets of redirection can be given in
  1152.           the Unix `/foo/bar' style.  Unix devices, such as
  1153.           `/dev/null', are also supported (see "Transparent conversion
  1154.           of special file names", below).
  1155.  
  1156.         - Multiple commands in a single command line.
  1157.  
  1158.           The emulation code supports the `foo ; bar' feature of several
  1159.           commands separated by a semi-colon.
  1160.  
  1161.         - Improved emulation of internal shell commands.
  1162.  
  1163.           The emulation of the shell command `cd' allows Unix-style
  1164.           forward slashes in its argument, and also changes the drive
  1165.           if the argument includes the drive letter.
  1166.  
  1167.         - Support for Unix-style shells.
  1168.  
  1169.           If the environment variable `SHELL' points to a name like `sh'
  1170.           or `bash', `system' invokes the shell to do everything, since
  1171.           the internal shell emulation is not sophisticated enough to
  1172.           cover Unix shell functionality.
  1173.  
  1174.         - Direct invocation of Unix shell scripts.
  1175.  
  1176.           Shell scripts can be invoked even if the `SHELL' environment
  1177.           variable doesn't point to a Unix-style shell, provided that
  1178.           the interpreter whose name appears on the first script line
  1179.           after the `#!' signature can be found somewhere along the
  1180.           `PATH'.
  1181.  
  1182.         - Exit code of the child program is returned to the caller.
  1183.  
  1184.      `COMMAND.COM' is only invoked by `system' to run batch files or
  1185.      commands internal to the shell.  However, `system' always looks
  1186.      for external programs first, so if you have e.g. a port of the GNU
  1187.      `echo' program installed, `system' will call it even though
  1188.      `COMMAND.COM' has an internal (and very much inferior) command by
  1189.      that name.
  1190.  
  1191.      These features come in especially handy in the DJGPP port of GNU
  1192.      `make'.  Where the original Unix code of `make' invokes the shell,
  1193.      the DJGPP port simply calls `system' to execute the commands in
  1194.      rules, and automatically gets support for long command lines and
  1195.      Unix-style shells required to run many `Makefile's of Unix origin.
  1196.  
  1197.      The above extended functionality also means that whenever a Unix
  1198.      program calls `system', in most cases the same call will work
  1199.      without any changes when compiled with DJGPP.  The result is not
  1200.      only ease of porting, but also less probability to leave subtle
  1201.      bugs in the ported program due to an overlooked fragment which
  1202.      assumes a Unix shell.
  1203.  
  1204.    * Transparent conversion of special file names.
  1205.  
  1206.      All DJGPP library functions pass file names to DOS via a single
  1207.      low-level function.  This allows to remap some special file names
  1208.      to their DOS equivalents.  For example, Unix-standard device names
  1209.      `/dev/null' and `/dev/tty' are converted to their DOS equivalents
  1210.      `NUL' and `CON', respectively.  File names which begin with
  1211.      `/dev/X/', where X is a drive letter, are converted to the DOS
  1212.      `X:/' form; this is required for running some Unix shell scripts
  1213.      which take apart the `PATH' variable where colons separate
  1214.      directories.
  1215.  
  1216.      In addition, file names which begin with `/dev/env/' are expanded
  1217.      using the environment variables.  For example, `/dev/env/DJDIR'
  1218.      expands into the full path name of the top DJGPP installation
  1219.      directory, since the environment variable `DJDIR' has that
  1220.      directory as its value.
  1221.  
  1222.    * Filesystem extensions.
  1223.  
  1224.      This feature is built into the low-level file-oriented library
  1225.      functions.  It allows the application to install a handler for
  1226.      certain filesystem calls, like `open', `read', `fstat', `dup',
  1227.      `close', etc.  If installed, such a handler is called just before
  1228.      the appropriate primitive is invoked to pass the call to DOS.  If
  1229.      the handler returns a non-zero value, it is assumed to have
  1230.      handled the call, and the usual primitive call is bypassed.
  1231.      Otherwise, the library proceeds with calling DOS as usual.
  1232.  
  1233.      This facility provides an easy way of handling special files and
  1234.      devices which DOS and Windows don't support directly.  For
  1235.      example, a program can install a handler for special file names
  1236.      like `/dev/ptyp0' and emulate these non-existent devices via an
  1237.      async communications library.
  1238.  
  1239.      Another way of putting filesystem extensions to a good use is when
  1240.      there's a need to emulate functionality that DOS file I/O doesn't
  1241.      support, even though the associated devices do exist.  For example,
  1242.      suppose you need to port code which sends special commands to the
  1243.      terminal device via `termcap' functions.  DOS supports a terminal
  1244.      device, but doesn't support `termcap'.  However, it is possible to
  1245.      achieve the same effects if direct screen writes are used instead
  1246.      of file I/O.  By installing a filesystem extension handler for the
  1247.      standard output handle, you could redirect all terminal I/O to
  1248.      direct screen writes and implement all the necessary `termcap'
  1249.      functionality, without any changes to the program's source code.
  1250.      This is how the DJGPP port of GNU `ls' supports the `--color'
  1251.      option without forcing users to install `ANSI.SYS', which is a
  1252.      special terminal driver that interprets ANSI escape sequences (and
  1253.      also has several nasty side-effects).
  1254.  
  1255.    * Support for long file names.
  1256.  
  1257.      DOS system calls are limited to file names in the so-called "8+3
  1258.      format": maximum 8 characters for the basename and maximum 3
  1259.      characters for the extension.  Therefore, it is impossible to
  1260.      access the long file names, offered by Windows 9X and Windows NT,
  1261.      via the DOS system calls.  However, Windows 9X provides a special
  1262.      API (a bunch of special functions of software interrupt 21h) that
  1263.      allows DOS programs to access long file names.  This API is widely
  1264.      known as the "LFN API", where "LFN" is an acronym for "Long File
  1265.      Names".  For each file-oriented DOS system call, the LFN API
  1266.      includes a replacement that supports long file names.  For
  1267.      example, there are functions to open files, list the files in a
  1268.      directory, create a directory, etc. using long names.  The LFN API
  1269.      also adds several functions to access extended functionality
  1270.      supported by the Windows filesystems.  For example, it is possible
  1271.      to get and set 3 times for each file, like on Unix, instead of
  1272.      only one time supported by DOS.
  1273.  
  1274.      The DJGPP library features transparent and automatic support for
  1275.      long file names on Windows 9X(1).  The DJGPP startup code queries
  1276.      the system for the availability of the LFN API, and if it's
  1277.      available, all low-level file-oriented primitives are
  1278.      automatically switched to using the special LFN-aware functions.
  1279.      This run-time detection of the LFN support means that the same
  1280.      executable will run on DOS and on Windows, and will automatically
  1281.      support long file names when it runs on Windows 9X.
  1282.  
  1283.    * Emulation of links.
  1284.  
  1285.      DOS doesn't support hard and symbolic links.  However, DJGPP
  1286.      emulates them to some extent.  The `link' library function
  1287.      simulates hard links by copying.  The `symlink' library function
  1288.      simulates a symbolic link for executable programs only, by
  1289.      creating a 2KB stub which is set up to run the COFF image from the
  1290.      target of the link.  Thus, `ln -s grep fgrep' does what you'd
  1291.      expect.
  1292.  
  1293.    * Emacs compatibility.
  1294.  
  1295.      Emacs is special because when it dumps itself during the build
  1296.      process, static and global variables are frozen in the dumped
  1297.      image with the last value they had at the time the program was
  1298.      dumped.  DJGPP has a special facility in the library through which
  1299.      library functions can detect that the program was dumped and
  1300.      restarted.  All library functions that need static variables, use
  1301.      this facility to reinitialize them.  This allows Emacs to be built
  1302.      with DJGPP without the need to analyze whether each library
  1303.      function called by Emacs is dump-safe.
  1304.  
  1305.    * Special-purpose utilities.
  1306.  
  1307.      In addition to relying on GNU development tool-chain, DJGPP
  1308.      introduces several utilities written specifically for the project.
  1309.      These utilities are meant to assist the developer in solving
  1310.      specific tasks common for the DJGPP environment.  Some of these
  1311.      utilities are listed below:
  1312.  
  1313.         - djtar
  1314.  
  1315.           `djtar' is a program that unpacks archives (but cannot create
  1316.           them).  It was originally written to unpack files created by
  1317.           `tar', because DOS and Windows lack standard programs for
  1318.           that.  Since the original release, `djtar' functionality was
  1319.           significantly extended, and now it can unpack `.tar.gz' and
  1320.           `.zip' files as well.  It also can unpack archives from
  1321.           floppy disks written as raw `/dev/rfd0a' devices on Unix
  1322.           systems, and it uncompresses and untars `.tar.gz' files on
  1323.           the fly, by feeding the untar code with output of the unzip
  1324.           code.  The latter feature is very important when unpacking
  1325.           large distributions, such as `emacs-XX.YY.tar.gz', because
  1326.           pipes are implemented as temporary disk files on DOS/Windows,
  1327.           and so on-the-fly decompression avoids creating huge
  1328.           temporary disk files.
  1329.  
  1330.           The ability to unzip `.zip' archives makes `djtar' the only
  1331.           free program which does that, since it turns out that
  1332.           InfoZip's `UnZip' license does not comply with FSF's
  1333.           definition of free software (according to Richard Stallman).
  1334.  
  1335.           In addition, `djtar' offers several features designed to
  1336.           prevent problems due to DOS/Windows file-name restrictions,
  1337.           see "DOS file names handling", below.
  1338.  
  1339.         - djsplit and djmerge
  1340.  
  1341.           These two programs come in handy when you need to carry a
  1342.           large file (usually, a compressed archive of a large
  1343.           distribution) on floppies.  `djsplit' splits a file into
  1344.           smaller chunks whose size is user-defined, and `djmerge'
  1345.           splices the chunks back together.
  1346.  
  1347.         - dtou and utod
  1348.  
  1349.           These programs are close cousins of `dos2unix' and `unix2dos',
  1350.           respectively, but they have several clever tricks up their
  1351.           sleeves.  First, they take file names from the command-line
  1352.           arguments and rewrite each file, instead of reading `stdin'
  1353.           and writing `stdout'; thus, they can convert many files in a
  1354.           single run.  And second, they preserve the time stamps of the
  1355.           converted files, to keep utilities like `make' happy.  With
  1356.           these programs, you can convert the entire directory tree of
  1357.           C source files to the DOS CR-LF format with a single command:
  1358.  
  1359.                 utod .../*.[ch]
  1360.  
  1361.           This uses the DJGPP wildcard expansion and the special `...'
  1362.           wildcard mentioned above.
  1363.  
  1364.         - update
  1365.  
  1366.           This is a replacement for the well-known `move-if-changed'
  1367.           shell script.  It is very handy in `Makefile's which should
  1368.           run on systems that don't have Bash installed.  Since it
  1369.           understands Unix-style forward slashes (like all DJGPP
  1370.           programs do), it is also widely used in `Makefile's for
  1371.           copying files, instead of the shell's internal `COPY'
  1372.           command, since `make' doesn't live well with backslashes in
  1373.           file names.
  1374.  
  1375.         - redir
  1376.  
  1377.           As its name implies, `redir' redirects standard handles.  It
  1378.           was originally written to allow redirection of `stderr',
  1379.           which stock DOS shell `COMMAND.COM' cannot do.  You need this
  1380.           redirection, e.g., when GCC spits out a long list of error
  1381.           messages which scroll off the screen.  `redir' can also
  1382.           append redirected handled (a-la `>>') and redirect `stderr'
  1383.           to the same place as `stdout' or vice versa, like what `>&'
  1384.           does in Unix shells.
  1385.  
  1386.           In addition, `redir' reports the exit status of the program it
  1387.           runs, and print the elapsed time used by the child.  These
  1388.           features are provided because, unlike on Unix, there are no
  1389.           standard utilities to do that.
  1390.  
  1391.         - symify
  1392.  
  1393.           DJGPP debugging support doesn't include Unix-style core files
  1394.           which allow post-mortem debugging of a crashed program.  To
  1395.           compensate for this deficiency, when a program crashes, a
  1396.           special library module prints the values stored in the CPU
  1397.           registers and the traceback of the function calls that led to
  1398.           the crash, as stored in the call frames pushed onto the stack.
  1399.  
  1400.           However, the stack traceback, as printed, is hard to
  1401.           interpret, because it only includes numeric addresses of the
  1402.           functions.  The `symify' program solves this problem.  It
  1403.           reads the traceback directly from the video memory, and uses
  1404.           the debug info recorded in the program's executable file to
  1405.           convert the addresses into file names and line numbers of the
  1406.           source files.  It then adds the file names and line numbers
  1407.           information near the corresponding addresses, thus making the
  1408.           traceback easy to comprehend.
  1409.  
  1410.    * DJGPP-specific extensions to GNU utilities.
  1411.  
  1412.      Besides the library functions and DJGPP-specific programs, a lot of
  1413.      special code went into the utilities ported to DJGPP, so that these
  1414.      utilities could work together smoothly and have the effect a user
  1415.      would expect.  Some of these extensions are listed below:
  1416.  
  1417.         - Bash supports Unix-style `PATH' format.  Unix uses `:' to
  1418.           separate directory names in the value of environment
  1419.           variables such as `PATH'.  Many shell scripts rely on this
  1420.           feature to look for programs along the `PATH'.  For example,
  1421.           the GNU-standard `configure' scripts do that to find `gcc',
  1422.           `ranlib' and other programs, as part of the auto-configuration
  1423.           process.
  1424.  
  1425.           However, DOS and Windows use `;' to separate directories in
  1426.           `PATH' (because absolute file names include a drive letter,
  1427.           like in `d:/foo/bar').  This breaks shell scripts which
  1428.           search along the `PATH'.
  1429.  
  1430.           To allow these scripts to run without changes, the DJGPP port
  1431.           of Bash introduces a special variable `PATH_SEPARATOR'.  If
  1432.           this variable is set to `:', Bash converts the value of
  1433.           `PATH' to pseudo-Unix form.  For example, if the original
  1434.           value of `PATH' is like this:
  1435.  
  1436.                 PATH=c:\djgpp\bin;d:\gnu\emacs\bin
  1437.  
  1438.           then setting `PATH_SEPARATOR=:' converts it to this:
  1439.  
  1440.                 PATH=/dev/c/djgpp/bin:/dev/d/gnu/emacs/bin
  1441.  
  1442.           This lets Unix shell scripts run unaltered.  However, to
  1443.           prevent the external commands from breaking (because they
  1444.           don't know anything about `PATH_SEPARATOR'), Bash converts
  1445.           the value of `PATH' back to its usual DOS style in the
  1446.           environment it passes to child programs.
  1447.  
  1448.           The DJGPP library supports the special `/dev/x/' file names by
  1449.           converting them to the usual DOS `x:/' format, before it
  1450.           issues DOS calls, so all DJGPP-compiled utilities can be
  1451.           safely run by a script when `PATH_SEPARATOR' is set to `:'.
  1452.  
  1453.         - `test -x foo' looks for `foo.exe', `foo.com', `foo.bat', etc.
  1454.           This is important e.g. in GNU `configure' scripts which look
  1455.           for programs along the `PATH'.
  1456.  
  1457.         - `install foo /bin/foo' actually installs `foo.exe' in the
  1458.           target directory.  Similarly, `gcc -o foo' creates both `foo'
  1459.           and `foo.exe'; the first causes `make' to be happy when Unix
  1460.           `Makefile' is in use (since the target names are usually
  1461.           extension-less on Unix), while the second can be run from the
  1462.           DOS command prompt, since stock DOS shell refuses to run a
  1463.           program without one of the executable extensions (`.exe',
  1464.           `.com' or `.bat') it knows about.  Both of these features are
  1465.           intended for using Unix `Makefile's without changes.
  1466.  
  1467.         - Shell specifications such as `/bin/sh' cause the shell to be
  1468.           looked for along the `PATH' as well, so that users won't need
  1469.           to have a `/bin' directory.
  1470.  
  1471.         - Programs which should pipe text to `lpr', write to the local
  1472.           printer device instead, if `lpr' could not be located.  Emacs
  1473.           and `dvips' are two examples of programs that offer this
  1474.           feature.
  1475.  
  1476.         - DOS file names handling: programs which unpack file archives
  1477.           rename files whose names are invalid on DOS/Windows.  The
  1478.           DJGPP ports of GNU `tar' and `cpio' programs, and the `djtar'
  1479.           utility supplied with the DJGPP development kit are examples
  1480.           of such programs.  They replace characters which aren't
  1481.           allowed in file names, like `+' on MS-DOS or `"' on
  1482.           MS-Windows, and rename files whose names are reserved on
  1483.           DOS/Windows by character devices (and therefore writing to
  1484.           them could have unexpected results).
  1485.  
  1486.           Another potential problems in unpacking file archives is that
  1487.           several different file names can map to the same name after
  1488.           truncation to the DOS 8+3 limits or as result of the
  1489.           automatic renaming I just described.  For this reason,
  1490.           `djtar' refuses to overwrite existing files, and requires the
  1491.           user to type in another name under which the file will be
  1492.           extracted.  If the user presses <RET>, the file is skipped.
  1493.  
  1494.           This interactive, one-by-one renaming might be tedious and
  1495.           error-prone, when there's a lot of files to rename.  A case
  1496.           in point is the test suite in the GNU Textutils distribution
  1497.           with a lot of names like `n+4b2l10f-0FF', `njml17f-lmlmlo',
  1498.           etc.  For these cases, `djtar' has a command-line option
  1499.           which can be used to submit a file with a mapping between
  1500.           original and DOS names; `djtar' will automatically rename
  1501.           every file mentioned there and will leave all other file
  1502.           names intact.  An example of putting this feature to use can
  1503.           be seen in the latest versions of Textutils (look for the file
  1504.           `djgpp/fnchange.lst' and the instructions to use it in
  1505.           `djgpp/README').
  1506.  
  1507. The features mentioned above are mostly small niceties.  But can you
  1508. imagine the amount of hacking needed to get Unix Makefiles and shell
  1509. scripts to work on DOS and Windows machines, if these tidbits didn't
  1510. exist?
  1511.  
  1512. ---------- Footnotes ----------
  1513.  
  1514. (1) Windows NT does not include this API, therefore DJGPP programs
  1515. cannot access long file names on NT systems.  However, a beta version
  1516. of a free LFN driver for NT is available.
  1517.  
  1518. 
  1519. File: kb.info,  Node: DJGPP.ENV,  Prev: Features,  Up: Hidden Features
  1520.  
  1521. DJGPP.ENV
  1522. =========
  1523.  
  1524. If you set the DJGPP environment variable to point to a file, that file
  1525. will be used to load the environment.  There is a djgpp.env file
  1526. distributed with djgpp that provides most of the values you need.  The
  1527. format of the file is like this:
  1528.  
  1529.      VAR=value
  1530.      VAR=value
  1531.      [program]
  1532.      VAR=value
  1533.      [prog2]
  1534.      VAR=value
  1535.  
  1536. Note that all whitespace is preserved, so be careful about trailing
  1537. spaces and spaces around the `='.  Variables in the first section
  1538. (before any [program] lines) apply to all programs.  Variables in
  1539. program-specific sections are loaded only when running that program.
  1540. For example, a [gcc] section would have variables that gcc.exe needs.
  1541. Values may refer to other variables using the DOS convention, like
  1542. %DJGPP%.  In addition, the first characters after the `%' can be used
  1543. to process the value before using it.  These syntaxes are allowed:
  1544.  
  1545.      %variable%     Take the value as is
  1546.      %:variable%    Take the directory portion only
  1547.      %;variable%    Append with a semicolon if variable is defined
  1548.      %/variable%    Replace all `\' with `/'
  1549.      %\variable%    Replace all `/' with `\'
  1550.      %<variable%    Convert to upper case
  1551.      %>variable%    Convert to lower case
  1552.  
  1553. You may list multiple characters after the %, but they must be before
  1554. the variable name, like %:/>DJGPP%.  Variable names are case sensitive.
  1555. The DOS environment variable names are usually upper case.  Variables
  1556. set through this file override any set in the DOS environment, unless
  1557. the first character of the variable name is `+', in which case the DOS
  1558. environment overrides the file (the `+' is removed from the name), as
  1559. in `+USER=dosuser'.
  1560.  
  1561. If you need a literal `%', write two percent signs in a row, like so:
  1562.  
  1563.      LESSBINFMT=*k<%%X>
  1564.  
  1565. This will produce a value of `*k<%X>' for the variable `LESSBINFMT'.
  1566.  
  1567. 
  1568. File: kb.info,  Node: Index,  Up: Top
  1569.  
  1570. Index
  1571. *****
  1572.  
  1573. * Menu:
  1574.  
  1575. * 387, and the value of _8087:           Changes in 2.03.
  1576. * 387, set to Y:                         Changes in 2.02.
  1577. * 8-bit characters, and string-related functions: Changes in 2.03.
  1578. * ^Z character, at end of a response file: Changes in 2.03.
  1579. * _8087:                                 Changes in 2.03.
  1580. * __crt0_load_environment_file:          Changes in 2.03.
  1581. * __djgpp_clock_tick_interval, introduced: Changes in 2.03.
  1582. * __djgpp_exception_toggle:              Changes in 2.02.
  1583. * __djgpp_set_ctrl_c, non-destructive query: Changes in 2.03.
  1584. * __dpmi_int, and signals on Windows:    Changes in 2.02.
  1585. * __dpmi_simulate_real_mode_procedure_iret(): Changes in 2.02.
  1586. * __dpmi_simulate_real_mode_procedure_retf_stack: Changes in 2.03.
  1587. * __dpmi_yield:                          Changes in 2.02.
  1588. * __FSEXT_alloc_fd:                      Changes in 2.02.
  1589. * _check_v2_prog, leaks file descriptor: Changes in 2.03.
  1590. * _close:                                Changes in 2.02.
  1591. * _creat:                                Changes in 2.02.
  1592. * _creatnew:                             Changes in 2.02.
  1593. * _crt0_startup_flags, the _CRT0_FLAG_KEEP_QUOTES flag: Changes in 2.02.
  1594. * _doprnt:                               Changes in 2.02.
  1595. * _dos_ds:                               Changes in 2.01.
  1596. * _dos_findfirst:                        Changes in 2.02.
  1597. * _doserrno:                             Changes in 2.02.
  1598. * _fargetsel:                            Changes in 2.01.
  1599. * _filbuf:                               Changes in 2.03.
  1600. * _fixpath:                              Changes in 2.02.
  1601. * _flsbuf:                               Changes in 2.03.
  1602. * _flush_disk_cache:                     Changes in 2.02.
  1603. * _get_volume_info, and invalid drives:  Changes in 2.03.
  1604. * _go32_dpmi_allocate_real_mode_callback_iret: Changes in 2.03.
  1605. * _go32_dpmi_free_real_mode_callback:    Changes in 2.01.
  1606. * _go32_dpmi_lock_code:                  Changes in 2.02.
  1607. * _go32_dpmi_lock_data:                  Changes in 2.02.
  1608. * _is_exec:                              Changes in 2.01.
  1609. * _lfn_gen_short_name:                   Changes in 2.02.
  1610. * _open:                                 Changes in 2.02.
  1611. * _osmajor:                              Changes in 2.02.
  1612. * _osminor:                              Changes in 2.02.
  1613. * _put_path:                             Changes in 2.03.
  1614. * _put_path2:                            Changes in 2.03.
  1615. * _read:                                 Changes in 2.02.
  1616. * _rename:                               Changes in 2.03.
  1617. * _sys_siglist:                          Changes in 2.02.
  1618. * _truename:                             Changes in 2.02.
  1619. * _use_lfn:                              Changes in 2.02.
  1620. * _use_lfn, and invalid drives:          Changes in 2.03.
  1621. * _USE_LFN, and invalid drives:          Changes in 2.03.
  1622. * _v2_prog_type:                         Changes in 2.02.
  1623. * _write:                                Changes in 2.02.
  1624. * access <1>:                            Changes in 2.02.
  1625. * access:                                Changes in 2.01.
  1626. * access, loss of FileFind handle:       Changes in 2.03.
  1627. * acos:                                  Changes in 2.03.
  1628. * acos, accuracy of emulation:           Changes in 2.03.
  1629. * acosh, Inf orNaN operands in emulator: Changes in 2.03.
  1630. * alarm:                                 Changes in 2.03.
  1631. * asin, accuracy of emulation:           Changes in 2.03.
  1632. * asinh, Inf orNaN operands in emulator: Changes in 2.03.
  1633. * assert:                                Changes in 2.02.
  1634. * atan, accuracy of emulation:           Changes in 2.03.
  1635. * atan2, accuracy of emulation:          Changes in 2.03.
  1636. * basename:                              Changes in 2.02.
  1637. * bash:                                  Changes in 2.02.
  1638. * Bash:                                  Changes in 2.03.
  1639. * bdosptr:                               Changes in 2.01.
  1640. * bin2h:                                 Changes in 2.03.
  1641. * bioscom:                               Changes in 2.02.
  1642. * cbrt:                                  Changes in 2.03.
  1643. * ceil, for negative arguments, emulation: Changes in 2.03.
  1644. * closedir, does not lose search handles: Changes in 2.02.
  1645. * Command lines, longer than 126 characters: Features.
  1646. * command-line arguments, globbing:      Changes in 2.03.
  1647. * Condition codes and FP emulation:      Changes in 2.03.
  1648. * conio.h:                               Changes in 2.02.
  1649. * Converting text files:                 Features.
  1650. * Core dumps:                            Features.
  1651. * cos, emulation for large arguments:    Changes in 2.03.
  1652. * Crashes due to SIGFPE, on Windows 9X:  Changes in 2.03.
  1653. * crt0.S, and long section names:        Changes in 2.03.
  1654. * ctime <1>:                             Changes in 2.03.
  1655. * ctime:                                 Changes in 2.02.
  1656. * dbgcom.c:                              Changes in 2.02.
  1657. * debug support, and file redirection:   Changes in 2.03.
  1658. * debug support, and floating-point code: Changes in 2.03.
  1659. * debug support, and signals:            Changes in 2.03.
  1660. * debug support, documentation:          Changes in 2.03.
  1661. * debuggers, and SIGQUIT:                Changes in 2.03.
  1662. * debuggers, and the stack length:       Changes in 2.03.
  1663. * debuggers, and the transfer buffer size: Changes in 2.03.
  1664. * Debugging, post-mortem:                Features.
  1665. * delay:                                 Changes in 2.02.
  1666. * Device I/O, emulation:                 Features.
  1667. * Device names, Unix:                    Features.
  1668. * difftime:                              Changes in 2.02.
  1669. * dir.h:                                 Changes in 2.01.
  1670. * dirname:                               Changes in 2.02.
  1671. * disable:                               Changes in 2.02.
  1672. * djasm <1>:                             Changes in 2.01.
  1673. * djasm:                                 Changes in 2.02.
  1674. * DJGPP utilities:                       Features.
  1675. * djgpp.djl, and long section names:     Changes in 2.03.
  1676. * DJGPP.ENV:                             DJGPP.ENV.
  1677. * djgpp.env:                             Changes in 2.02.
  1678. * djtar, and the tarchange.lst file:     Changes in 2.03.
  1679. * djtar, file-name conversions:          Changes in 2.03.
  1680. * doprnt:                                Changes in 2.03.
  1681. * dos.h:                                 Changes in 2.01.
  1682. * doscan:                                Changes in 2.01.
  1683. * dosmemput:                             Changes in 2.01.
  1684. * dtou:                                  Changes in 2.03.
  1685. * dxeload:                               Changes in 2.01.
  1686. * echo <1>:                              Changes in 2.02.
  1687. * echo:                                  Changes in 2.01.
  1688. * ecvt:                                  Changes in 2.02.
  1689. * ecvtbuf:                               Changes in 2.02.
  1690. * edebug <1>:                            Changes in 2.02.
  1691. * edebug <2>:                            Changes in 2.01.
  1692. * edebug:                                Changes in 2.02.
  1693. * Emacs dumping, and library functions:  Features.
  1694. * Emacs, warnings from GDB:              Changes in 2.03.
  1695. * emu387:                                Changes in 2.02.
  1696. * emu387.dxe:                            Changes in 2.03.
  1697. * emu387.dxe, and FSQRT instruction:     Changes in 2.03.
  1698. * emu387.dxe, comparison, addition and subtraction: Changes in 2.03.
  1699. * emu387.dxe, on Windows:                Changes in 2.03.
  1700. * enable:                                Changes in 2.02.
  1701. * Environment Variables:                 DJGPP.ENV.
  1702. * environment variables, in file names:  Changes in 2.03.
  1703. * errno:                                 Changes in 2.02.
  1704. * errno, set by math functions in libc.a: Changes in 2.03.
  1705. * exit <1>:                              Changes in 2.01.
  1706. * exit:                                  Changes in 2.02.
  1707. * Exit status reporting:                 Features.
  1708. * exp10:                                 Changes in 2.03.
  1709. * exp2:                                  Changes in 2.03.
  1710. * expm1:                                 Changes in 2.03.
  1711. * fcntl:                                 Changes in 2.01.
  1712. * FCOS instruction, emulation for large arguments: Changes in 2.03.
  1713. * fcvt:                                  Changes in 2.02.
  1714. * fcvtbuf:                               Changes in 2.02.
  1715. * fflush:                                Changes in 2.02.
  1716. * ffs:                                   Changes in 2.02.
  1717. * FILE objects, allocation:              Changes in 2.03.
  1718. * Filesystem extensions facility:        Features.
  1719. * findfirst:                             Changes in 2.01.
  1720. * flushing buffered output:              Changes in 2.03.
  1721. * fmod, emulation for negative arguments: Changes in 2.03.
  1722. * fnsplit:                               Changes in 2.02.
  1723. * FP emulation, abnormal results:        Changes in 2.03.
  1724. * FP emulation, and Cn condition codes:  Changes in 2.03.
  1725. * FP emulation, and SIGFPE:              Changes in 2.03.
  1726. * FP emulation, on Windows:              Changes in 2.03.
  1727. * FP emulator, and FSQRT instruction:    Changes in 2.03.
  1728. * FP emulator, comparison, addition and subtraction: Changes in 2.03.
  1729. * FPATAN instruction, emulation, accuracy: Changes in 2.03.
  1730. * FPREM/FPREM1 instruction, emulation for large arguments: Changes in 2.03.
  1731. * fprintf <1>:                           Changes in 2.02.
  1732. * fprintf:                               Changes in 2.03.
  1733. * fprintf, and negative zero:            Changes in 2.03.
  1734. * FPTAN instruction, emulation, argument out of range: Changes in 2.03.
  1735. * fputc:                                 Changes in 2.03.
  1736. * fputs:                                 Changes in 2.03.
  1737. * fread:                                 Changes in 2.03.
  1738. * free:                                  Changes in 2.02.
  1739. * freopen, read/write access to files:   Changes in 2.03.
  1740. * FRNDINT instruction, emulation for negative arguments: Changes in 2.03.
  1741. * FSCALE instruction, emulation, handles overflow: Changes in 2.03.
  1742. * fscanf:                                Changes in 2.03.
  1743. * fscanf, and octal conversions:         Changes in 2.03.
  1744. * fscanf, pointer conversions:           Changes in 2.03.
  1745. * fsdb:                                  Changes in 2.01.
  1746. * fsdb, Step Over bug:                   Changes in 2.03.
  1747. * fsdb, support for SIGQUIT:             Changes in 2.03.
  1748. * fsetpos, return value:                 Changes in 2.03.
  1749. * FSIN instruction, emulation for large arguments: Changes in 2.03.
  1750. * FSINCOS instruction, emulation for large arguments: Changes in 2.03.
  1751. * FSQRT instruction, emulation for infinite arguments: Changes in 2.03.
  1752. * FST/FSTP instructions, emulation of, over/underflow: Changes in 2.03.
  1753. * FST/FSTP instructions, emulation of, rounding: Changes in 2.03.
  1754. * fstat:                                 Changes in 2.02.
  1755. * ftruncate, and file pointer position:  Changes in 2.03.
  1756. * fwrite:                                Changes in 2.03.
  1757. * FXCH instruction, emulation, abnormal operands: Changes in 2.03.
  1758. * FYL2X instruction, emulation pops the stack: Changes in 2.03.
  1759. * gcvt:                                  Changes in 2.02.
  1760. * GDB, debugging Emacs:                  Changes in 2.03.
  1761. * getc:                                  Changes in 2.03.
  1762. * getch:                                 Changes in 2.03.
  1763. * getche:                                Changes in 2.03.
  1764. * gethostname:                           Changes in 2.02.
  1765. * getitimer:                             Changes in 2.03.
  1766. * getitimer, and system clock granularity: Changes in 2.03.
  1767. * getkey:                                Changes in 2.02.
  1768. * getmntent:                             Changes in 2.02.
  1769. * getopt:                                Changes in 2.01.
  1770. * getrusage:                             Changes in 2.01.
  1771. * gettexinfo:                            Changes in 2.03.
  1772. * getxkey:                               Changes in 2.02.
  1773. * glob <1>:                              Changes in 2.01.
  1774. * glob <2>:                              Changes in 2.02.
  1775. * glob <3>:                              Changes in 2.01.
  1776. * glob:                                  Changes in 2.02.
  1777. * glob, and mixed-case letters in file names: Changes in 2.03.
  1778. * Globbing:                              Features.
  1779. * go32-v2 <1>:                           Changes in 2.02.
  1780. * go32-v2:                               Changes in 2.01.
  1781. * gxx <1>:                               Changes in 2.01.
  1782. * gxx:                                   Changes in 2.02.
  1783. * gxx, and missing libgpp.a:             Changes in 2.03.
  1784. * Header files, compatibility:           Features.
  1785. * hidden features, documentation:        Changes in 2.03.
  1786. * info/dir.txi:                          Changes in 2.02.
  1787. * inp:                                   Changes in 2.01.
  1788. * inpw:                                  Changes in 2.01.
  1789. * insque:                                Changes in 2.02.
  1790. * interval timers and uclock:            Changes in 2.03.
  1791. * interval timers, small intervals:      Changes in 2.03.
  1792. * ioctl:                                 Changes in 2.01.
  1793. * ioctl, emulation:                      Features.
  1794. * kill, signals to other programs:       Changes in 2.03.
  1795. * lconv:                                 Changes in 2.02.
  1796. * ldexp:                                 Changes in 2.01.
  1797. * lfn:                                   Changes in 2.01.
  1798. * LFN API:                               Features.
  1799. * LFN support and invalid drives:        Changes in 2.03.
  1800. * libc.tex:                              Changes in 2.02.
  1801. * libemu.a, and FSQRT instruction:       Changes in 2.03.
  1802. * libemu.a, comparison, addition and subtraction: Changes in 2.03.
  1803. * libemu.a, missing npxsetup.o:          Changes in 2.03.
  1804. * libemu.a, on Windows:                  Changes in 2.03.
  1805. * libm.a:                                Changes in 2.01.
  1806. * Library, compatibility:                Features.
  1807. * libstdcxx.a, and gxx:                  Changes in 2.03.
  1808. * Links, emulation:                      Features.
  1809. * localtime:                             Changes in 2.03.
  1810. * lock:                                  Changes in 2.02.
  1811. * Long command lines:                    Features.
  1812. * Long file name support:                Features.
  1813. * lowvideo:                              Changes in 2.03.
  1814. * Make, crashes:                         Changes in 2.03.
  1815. * make, support for Unix features:       Features.
  1816. * malloc:                                Changes in 2.02.
  1817. * math functions, improved versions:     Changes in 2.03.
  1818. * mcount.c:                              Changes in 2.02.
  1819. * memchr:                                Changes in 2.02.
  1820. * memicmp:                               Changes in 2.02.
  1821. * memicmp, included in the library:      Changes in 2.03.
  1822. * merge:                                 Changes in 2.02.
  1823. * mkstemp:                               Changes in 2.02.
  1824. * mktime <1>:                            Changes in 2.02.
  1825. * mktime:                                Changes in 2.03.
  1826. * mntent:                                Changes in 2.01.
  1827. * multibyte:                             Changes in 2.02.
  1828. * nanf:                                  Changes in 2.02.
  1829. * negative zero, printing:               Changes in 2.03.
  1830. * Numeric exceptions, masked:            Changes in 2.02.
  1831. * open:                                  Changes in 2.01.
  1832. * open, race conditions:                 Changes in 2.02.
  1833. * open, when there are no more file handles: Changes in 2.03.
  1834. * opendir:                               Changes in 2.02.
  1835. * opendir, does not lose search handles: Changes in 2.02.
  1836. * outp:                                  Changes in 2.01.
  1837. * outportsb:                             Changes in 2.02.
  1838. * outportsl:                             Changes in 2.02.
  1839. * outportsw:                             Changes in 2.02.
  1840. * outpw:                                 Changes in 2.01.
  1841. * Overflow in emulation of arithmetic FP instructions: Changes in 2.03.
  1842. * PATH separator, Unix-style:            Features.
  1843. * pathconf:                              Changes in 2.02.
  1844. * pc.h:                                  Changes in 2.01.
  1845. * PC98, SIGINT and SIGQUIT:              Changes in 2.03.
  1846. * pclose:                                Changes in 2.02.
  1847. * popen <1>:                             Changes in 2.02.
  1848. * popen:                                 Changes in 2.01.
  1849. * Post-mortem debugging:                 Features.
  1850. * powi:                                  Changes in 2.03.
  1851. * printf <1>:                            Changes in 2.02.
  1852. * printf <2>:                            Changes in 2.01.
  1853. * printf:                                Changes in 2.03.
  1854. * printf, and negative zero:             Changes in 2.03.
  1855. * profiling <1>:                         Changes in 2.03.
  1856. * profiling:                             Changes in 2.02.
  1857. * psignal:                               Changes in 2.02.
  1858. * putc:                                  Changes in 2.03.
  1859. * putpath:                               Changes in 2.02.
  1860. * qsort:                                 Changes in 2.02.
  1861. * rand48:                                Changes in 2.03.
  1862. * rawclock:                              Changes in 2.02.
  1863. * readdir <1>:                           Changes in 2.01.
  1864. * readdir:                               Changes in 2.02.
  1865. * realloc, crashes when memory is exhausted: Changes in 2.03.
  1866. * redir <1>:                             Changes in 2.03.
  1867. * redir:                                 Changes in 2.02.
  1868. * redir, and FP emulation:               Changes in 2.03.
  1869. * Redirecting stderr:                    Features.
  1870. * rename <1>:                            Changes in 2.02.
  1871. * rename:                                Changes in 2.03.
  1872. * rename, errno value when the file is open: Changes in 2.03.
  1873. * response file, ^Z at the end:          Changes in 2.03.
  1874. * rewinddir, and . and .. entries:       Changes in 2.02.
  1875. * rewinddir, does not lose search handles: Changes in 2.02.
  1876. * s_ceil:                                Changes in 2.02.
  1877. * s_floor:                               Changes in 2.02.
  1878. * scalbn:                                Changes in 2.01.
  1879. * scanf <1>:                             Changes in 2.03.
  1880. * scanf:                                 Changes in 2.02.
  1881. * scanf, and octal conversions:          Changes in 2.03.
  1882. * scanf, pointer conversions:            Changes in 2.03.
  1883. * ScreenAttrib:                          Changes in 2.03.
  1884. * ScreenGetChar:                         Changes in 2.01.
  1885. * searchpath, and file names with slashes: Changes in 2.03.
  1886. * seekdir, and . and .. entries:         Changes in 2.02.
  1887. * select:                                Changes in 2.02.
  1888. * setitimer <1>:                         Changes in 2.03.
  1889. * setitimer:                             Changes in 2.02.
  1890. * setitimer, and system clock granularity: Changes in 2.03.
  1891. * setitimer, when called with NULL argument: Changes in 2.03.
  1892. * setmode, and termios:                  Changes in 2.03.
  1893. * sf_ceil:                               Changes in 2.02.
  1894. * sf_floor:                              Changes in 2.02.
  1895. * sigaction:                             Changes in 2.01.
  1896. * sigaddset:                             Changes in 2.02.
  1897. * SIGALRM:                               Changes in 2.02.
  1898. * sigdelset:                             Changes in 2.02.
  1899. * sigemptyset:                           Changes in 2.02.
  1900. * sigfillset:                            Changes in 2.02.
  1901. * SIGFPE and FP emulation:               Changes in 2.03.
  1902. * SIGFPE, on Windows 9X:                 Changes in 2.03.
  1903. * SIGINT:                                Changes in 2.01.
  1904. * SIGINT and SIGQUIT, PC98:              Changes in 2.03.
  1905. * sigismember:                           Changes in 2.02.
  1906. * sigpending:                            Changes in 2.02.
  1907. * sigprocmask:                           Changes in 2.02.
  1908. * SIGPROF:                               Changes in 2.02.
  1909. * sin, emulation for large arguments:    Changes in 2.03.
  1910. * sincos:                                Changes in 2.03.
  1911. * sincos, emulation for large arguments: Changes in 2.03.
  1912. * split:                                 Changes in 2.02.
  1913. * Splitting large files:                 Features.
  1914. * sprintf <1>:                           Changes in 2.02.
  1915. * sprintf:                               Changes in 2.03.
  1916. * sprintf, and negative zero:            Changes in 2.03.
  1917. * sqrt, emulation for infinite arguments: Changes in 2.03.
  1918. * srand <1>:                             Changes in 2.03.
  1919. * srand:                                 Changes in 2.02.
  1920. * srand48:                               Changes in 2.03.
  1921. * sscanf:                                Changes in 2.03.
  1922. * sscanf, and octal conversions:         Changes in 2.03.
  1923. * sscanf, pointer conversions:           Changes in 2.03.
  1924. * stack dump, when aborted or crashed:   Changes in 2.02.
  1925. * stackavail:                            Changes in 2.02.
  1926. * stat <1>:                              Changes in 2.01.
  1927. * stat <2>:                              Changes in 2.02.
  1928. * stat <3>:                              Changes in 2.03.
  1929. * stat <4>:                              Changes in 2.02.
  1930. * stat:                                  Changes in 2.01.
  1931. * statfs:                                Changes in 2.02.
  1932. * stdaux:                                Changes in 2.01.
  1933. * stdprn:                                Changes in 2.01.
  1934. * stub:                                  Changes in 2.02.
  1935. * stub.asm:                              Changes in 2.02.
  1936. * stubedit:                              Changes in 2.02.
  1937. * stubify:                               Changes in 2.01.
  1938. * symify, and long file/function names:  Changes in 2.03.
  1939. * symlink:                               Changes in 2.02.
  1940. * symlink, source and target in different directories: Changes in 2.03.
  1941. * Symlinks, emulation:                   Features.
  1942. * sync:                                  Changes in 2.02.
  1943. * system <1>:                            Changes in 2.01.
  1944. * system:                                Changes in 2.02.
  1945. * system function, extended functionality: Features.
  1946. * system, and Ctrl-Z in termios:         Changes in 2.03.
  1947. * system, and pipe symbols:              Changes in 2.03.
  1948. * system, and redirection:               Changes in 2.03.
  1949. * tan, emulation for large arguments:    Changes in 2.03.
  1950. * tan, emulation, argument out of range: Changes in 2.03.
  1951. * tcflush:                               Changes in 2.03.
  1952. * tcgetpgrp, added:                      Changes in 2.03.
  1953. * tcsetattr:                             Changes in 2.03.
  1954. * tcsetpgrp, added:                      Changes in 2.03.
  1955. * template instantiation, improved support: Changes in 2.03.
  1956. * tempnam:                               Changes in 2.02.
  1957. * termios:                               Changes in 2.03.
  1958. * termios, and binary I/O:               Changes in 2.03.
  1959. * termios, and buffered stdio:           Changes in 2.03.
  1960. * termios, and TAB expansion:            Changes in 2.03.
  1961. * termios, input and SIGINT and SIGQUIT: Changes in 2.03.
  1962. * textbackground:                        Changes in 2.03.
  1963. * textcolor:                             Changes in 2.03.
  1964. * timer tick frequency, and setitimer function: Changes in 2.03.
  1965. * Timing programs:                       Features.
  1966. * tmpfile:                               Changes in 2.02.
  1967. * tmpfile, race conditions:              Changes in 2.02.
  1968. * tmpfile, when file handles are exhausted: Changes in 2.03.
  1969. * tolower:                               Changes in 2.03.
  1970. * toupper:                               Changes in 2.03.
  1971. * TZ:                                    Changes in 2.03.
  1972. * tzname:                                Changes in 2.02.
  1973. * uclock:                                Changes in 2.03.
  1974. * uclock, on Windows:                    Changes in 2.03.
  1975. * Underflow in emulation of arithmetic FP instructions: Changes in 2.03.
  1976. * Unix compatibility:                    Features.
  1977. * Unix device names <1>:                 Features.
  1978. * Unix device names:                     Changes in 2.02.
  1979. * unlock:                                Changes in 2.02.
  1980. * unnormal numbers, printing:            Changes in 2.03.
  1981. * Unpacking compressed archives:         Features.
  1982. * Updating files:                        Features.
  1983. * utilities, DJGPP-specific:             Features.
  1984. * utod:                                  Changes in 2.03.
  1985. * va_start:                              Changes in 2.01.
  1986. * vfprintf:                              Changes in 2.03.
  1987. * vfscanf:                               Changes in 2.03.
  1988. * vfscanf, and octal conversions:        Changes in 2.03.
  1989. * vfscanf, pointer conversions:          Changes in 2.03.
  1990. * vprintf:                               Changes in 2.03.
  1991. * vscanf:                                Changes in 2.03.
  1992. * vscanf, and octal conversions:         Changes in 2.03.
  1993. * vscanf, pointer conversions:           Changes in 2.03.
  1994. * vsprintf:                              Changes in 2.03.
  1995. * vsscanf:                               Changes in 2.03.
  1996. * vsscanf, and octal conversions:        Changes in 2.03.
  1997. * vsscanf, pointer conversions:          Changes in 2.03.
  1998. * wchar_t type, and Windows programs:    Changes in 2.03.
  1999. * wctype.h, pre-processor and compilation errors: Changes in 2.03.
  2000. * wildcards:                             Changes in 2.01.
  2001. * Wildcards:                             Features.
  2002. * write <1>:                             Changes in 2.02.
  2003. * write:                                 Changes in 2.01.
  2004.  
  2005.  
  2006. 
  2007. Tag Table:
  2008. Node: Top104
  2009. Node: Introduction787
  2010. Node: What Changed903
  2011. Node: Changes in 2.011125
  2012. Node: Changes in 2.023994
  2013. Node: Changes in 2.0317504
  2014. Node: Known Bugs39670
  2015. Node: Known Anti-Bugs39784
  2016. Node: Hidden Features39911
  2017. Node: Features40480
  2018. Node: DJGPP.ENV65153
  2019. Node: Index67068
  2020. 
  2021. End Tag Table
  2022.